module.exports = {
  rules: {
    'no-hardcoded-string': {
      meta: {
        type: 'problem',
        docs: {
          description: 'Disallow hardcoded strings in JSX and template literals',
          category: 'Best Practices',
          recommended: true,
        },
        messages: {
          noHardcodedString: 'Hardcoded string "{{text}}" should be replaced with an i18n key',
        },
      },
      create(context) {
        return {
          // 检查 JSX 文本节点
          JSXText(node) {
            const text = node.value.trim();
            // 忽略空文本、纯数字和短文本
            if (text && text.length > 2 && !/^[0-9\s]+$/.test(text)) {
              context.report({
                node,
                messageId: 'noHardcodedString',
                data: { text },
              });
            }
          },
          
          // 检查字符串字面量
          Literal(node) {
            // 只检查字符串字面量
            if (typeof node.value === 'string') {
              const text = node.value.trim();
              // 忽略空文本、纯数字和短文本
              if (text && text.length > 2 && !/^[0-9\s]+$/.test(text)) {
                // 检查是否在 JSX 属性中使用
                if (node.parent && 
                    (node.parent.type === 'JSXAttribute' || 
                     node.parent.type === 'Property' && node.parent.key && node.parent.key.name === 'children')) {
                  context.report({
                    node,
                    messageId: 'noHardcodedString',
                    data: { text },
                  });
                }
              }
            }
          },
          
          // 检查模板字面量
          TemplateLiteral(node) {
            node.quasis.forEach(quasi => {
              const text = quasi.value.raw.trim();
              if (text && text.length > 2 && !/^[0-9\s]+$/.test(text)) {
                context.report({
                  node: quasi,
                  messageId: 'noHardcodedString',
                  data: { text },
                });
              }
            });
          }
        };
      },
    },
  },
};